#include "light.h"
#include "ui_light.h"

extern "C"
{

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <unistd.h>

}

#define TEST_MAGIC 'x'                    //定义幻数
#define LED1 _IO(TEST_MAGIC, 0)
#define LED2 _IO(TEST_MAGIC, 1)
#define LED3 _IO(TEST_MAGIC, 2)
#define LED4 _IO(TEST_MAGIC, 3)
#define LED_ON  	0	//灯亮
#define LED_OFF		1   //灯灭

light::light(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::light)
{
    ui->setupUi(this);
    ui->pushButton->setStyleSheet("border-image: url(./btn1.jpg);");
    ui->pushButton_2->setStyleSheet("border-image: url(./btn1.jpg);");
    ui->pushButton_3->setStyleSheet("border-image: url(./btn1.jpg);");

    QPalette pal = this->palette();
    pal.setBrush(QPalette::Background,QBrush(QPixmap("./bg.jpg")));
    setPalette(pal);
    // 条件编译：只在Linux下打开设备
#ifdef Q_OS_LINUX
    fd = open("/dev/Led", O_RDWR);
    if(fd < 0) {
        // Linux下打开设备失败处理
        qDebug() << "打开/dev/Led失败，错误:" << strerror(errno);
        // 可以添加错误处理逻辑，如禁用按钮等
    }
#else
    // Windows下的处理
    qDebug() << "Windows环境，跳过设备打开";
    fd = -1;  // 标记为无效文件描述符
#endif

}

light::~light()
{

    delete ui;
    //4. 关闭设备文件
    ::close(fd);  //::访问全局close函数，非本类close函数
}

void light::on_pushButton_clicked()
{
    // 直接获取父窗口（MainWindow）
    if (QWidget *parent = this->parentWidget())
    {
    parent->show();     // 显示父窗口
    parent->raise();    // 置顶显示
    }

    this->close(); // 关闭当前相册窗口
}
//开灯
void light::on_pushButton_3_clicked()
{
    //开灯
    QPixmap pic("./lighton.jpg");
    //当图片的大小和QLabel的大小不一致时，根据控件的大小调整图片的大小比例缩放
    pic = pic.scaled(ui->label->width(),ui->label->height());
    ui->label->setPixmap(pic);
    ioctl(fd,LED1,LED_ON);
    ioctl(fd,LED2,LED_ON);
    ioctl(fd,LED3,LED_ON);
    ioctl(fd,LED4,LED_ON);
}
//关灯
void light::on_pushButton_2_clicked()
{
    QPixmap pic("./lightdown.jpg");
    //当图片的大小和QLabel的大小不一致时，根据控件的大小调整图片的大小比例缩放
    pic = pic.scaled(ui->label->width(),ui->label->height());
    ui->label->setPixmap(pic);
    //关灯
    ioctl(fd,LED1,LED_OFF);
    ioctl(fd,LED2,LED_OFF);
    ioctl(fd,LED3,LED_OFF);
    ioctl(fd,LED4,LED_OFF);

}
